home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / SHOW2.BAS < prev    next >
BASIC Source File  |  2000-09-29  |  9KB  |  470 lines

  1. $INCLUDE "REGNAMES.INC"
  2. CLS
  3.  
  4. PRINT "Show!  -  Version 0.9  -  Copyright (C) 1993 by Thomas Dreibholz"
  5.  
  6. IF CheckVector(&H49)=0 THEN
  7.  PRINT "FEHLER: File Transfer ist nicht aktiv."
  8.  PRINT "        FILE.EXE wurde nicht durch die CONFIG.SYS eingebunden!"
  9.  GOTO ende
  10. END IF
  11.  
  12. IF CheckVector(&H33)=0 THEN
  13.  PRINT "FEHLER: Maustreiber nicht vorhanden!"
  14.  GOTO ende
  15. END IF
  16.  
  17. REG %AX,0
  18. CALL INTERRUPT &H33
  19. IF REG(%AX)=0 THEN
  20.  PRINT "FEHLER: Fehler bei Reset des Maustreibers!"
  21.  GOTO ende
  22. END IF
  23. tasten=REG(%BX)
  24.  
  25. REG %AX,(&H6*256)
  26. CALL INTERRUPT &H49
  27. jseg=REG(%ES)
  28. janus=REG(%DI)
  29.  
  30. REG %AX,(&H4F*256)
  31. REG %ES,jseg
  32. REG %DI,janus
  33. CALL INTERRUPT &H10
  34. IF REG(%AX)<>&H4F THEN
  35.  PRINT "FEHLER: Es ist keine SuperVGA-Karte installiert, oder der"
  36.  PRINT "        VESA-Treiber wurde nicht in die CONFIG.SYS eingebunden."
  37.  GOTO ende
  38. END IF
  39.  
  40. REG %AX,(&H4F*256)+&H01
  41. REG %CX,&H101
  42. REG %ES,jseg
  43. REG %DI,janus
  44. CALL INTERRUPT &H10
  45. IF REG(%AX)<>&H4F THEN
  46.  PRINT "FEHLER: SuperVGA-Karte untersttzt den Modus $101 (640*480 bei 256 Farben)"
  47.  PRINT "        nicht. Diese Aufl”sung wird aber mindestens ben”tigt."
  48. END IF
  49.  
  50. DEF SEG = jseg
  51. m101.Segment=PEEKI(janus+8)
  52. m101.Add=PEEKI(janus+4)
  53. m101.File=OpenAmiga("M:Display640")
  54. IF m101.File=-1 THEN
  55.  PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display640.cdat l„át sich"
  56.  PRINT "        nicht ”ffnen."
  57.  GOTO ende
  58. END iF
  59. m101.FileOkay=100
  60.  
  61. REG %AX,(&H4F*256)+&H01
  62. REG %CX,&H103
  63. REG %ES,jseg
  64. REG %DI,janus
  65. CALL INTERRUPT &H10
  66. IF REG(%AX)=&H4F THEN
  67.  DEF SEG = jseg
  68.  m103.Okay=100
  69.  m103.Segment=PEEKI(janus+8)
  70.  m103.Add=PEEKI(janus+4)
  71.  m103.File=OpenAmiga("M:Display800")
  72.  IF m103.File=-1 THEN
  73.   PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display800.cdat l„át sich"
  74.   PRINT "        nicht ”ffnen."
  75.   GOTO ende
  76.  END iF
  77.  m103.FileOkay=100
  78. END IF
  79.  
  80. DIM bilder$(10)
  81. bilder$(0)="CC:Prgs/F11.cdat"
  82. bilder$(1)="CC:Prgs/T1.cdat"
  83. bilder$(2)="CC:Prgs/F12.cdat"
  84. bilder$(3)="CC:Prgs/J1.cdat"
  85. bilder$(4)="CC:Prgs/F13.cdat"
  86. bilder$(5)="CC:Prgs/Newton.cdat"
  87. bilder$(6)="CC:Prgs/F14.cdat"
  88. bilder$(7)="CC:Prgs/F640*480.cdat"
  89. bilder$(8)="CC:Prgs/F800*600.cdat"
  90. bilder=8
  91. richtung=1
  92. wiederholung=0
  93.  
  94. bool=1 : bildFH=-1 : bnum=0
  95. WHILE bool=1
  96.  IF bnum<>-1 THEN
  97.   bild$=bilder$(bnum)
  98.   IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  99.   CALL LadeBild
  100.   CALL LadePalette
  101.   FOR schleife=0 TO 15000
  102.    IF INKEY$<>"" OR bildFH=-1 OR Button<>0 THEN
  103.     WHILE Button<>0 : WEND
  104. q:
  105.     f=Schalter
  106.     IF f=0 THEN richtung=-1 : GOTO neu
  107.     IF f=1 THEN richtung=1 : GOTO neu
  108.     IF f=2 THEN bnum=0 : GOTO weiter
  109.     IF f=3 THEN bnum=bilder : GOTO weiter
  110.     IF f=4 THEN
  111.      WHILE INKEY$="":WEND
  112.      GOTO q
  113.     END IF
  114.     IF f=7 THEN GOTO ende
  115.     IF bildFH=-1 THEN GOTO weiter
  116.    END IF
  117.   NEXT
  118.  ELSE
  119.   GOTO q
  120.  END IF
  121. neu:
  122.  bnum=bnum+richtung
  123.  IF wiederholung=1 THEN
  124.   IF bnum>bilder THEN bnum=0
  125.   IF bnum<0 THEN bnum=bilder
  126.  ELSE
  127.   IF bnum>bilder OR bnum<0 THEN bnum=-1
  128.  END IF
  129. weiter:
  130. WEND
  131.  
  132. ende:
  133. SCREEN 0
  134. CLS
  135. IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  136. IF m103.FileOkay THEN CALL CloseAmiga(m103.File)
  137. IF m101.FileOkay THEN CALL CloseAmiga(m101.File)
  138. SOUND 1500,2
  139. PRINT "bye!"
  140. END
  141.  
  142.  
  143. FUNCTION CheckVector(num) STATIC
  144.  REG %AX,(&H35*256)+num
  145.  CALL INTERRUPT &H21
  146.  segm&=REG(%ES)
  147.  offs&=REG(%BX)
  148.  DEF SEG = segm&
  149.  IF (segm&=0) OR (PEEK(offs&)=207) THEN
  150.   CheckVector=0
  151.  ELSE
  152.   CheckVector=1
  153.  END IF
  154. END FUNCTION
  155.  
  156. FUNCTION OpenAmiga(n$) SHARED
  157.  n$=n$+CHR$(0)
  158.  DEF SEG = jseg
  159.  FOR i=1 TO LEN(n$)
  160.   POKE janus+i-1,ASC(MID$(n$,i,1))
  161.  NEXT
  162.  REG %AX,&H0*256
  163.  REG %BX,1
  164.  CALL INTERRUPT &H49
  165.  IF REG(%AX)=10000 THEN
  166.   OpenAmiga=REG(%BX)
  167.  ELSE
  168.   OpenAmiga=-1
  169.  END IF
  170. END FUNCTION
  171.  
  172. SUB CloseAmiga(handle) STATIC
  173.  REG %AX,&H1*256
  174.  REG %BX,handle
  175.  CALL INTERRUPT &H49
  176. END SUB
  177.  
  178. SUB SeekAmiga(handle,p) STATIC
  179.  REG %AX,&H7*256
  180.  REG %BX,handle
  181.  REG %CX,p
  182.  CALL INTERRUPT &H49
  183. END SUB
  184.  
  185. FUNCTION ReadAmiga(handle,length) STATIC
  186.  REG %AX,&H2*256
  187.  REG %BX,handle
  188.  REG %CX,length
  189.  CALL INTERRUPT &H49
  190.  ReadAmiga=REG(%BX)
  191. END FUNCTION
  192.  
  193. SUB CopyToPC(s,o&,length) STATIC
  194.  REG %AX,&H5*256
  195.  REG %BX,s
  196.  REG %DX,o&
  197.  REG %CX,length
  198.  CALL INTERRUPT &H49
  199. END SUB
  200.  
  201. SUB SelectRAM(num) STATIC
  202.  REG %AX,(&H4F*256)+&H05
  203.  REG %BX,0
  204.  REG %DX,num
  205.  CALL INTERRUPT &H10
  206. END SUB
  207.  
  208. SUB SelectMode(num) SHARED
  209.  REG %AX,(&H4F*256)+&H02
  210.  REG %BX,num
  211.  CALL INTERRUPT &H10
  212.  IF mode=&H103 THEN
  213.   segment=m103.Segment
  214.   add=m103.Add
  215.  ELSE
  216.   segment=m101.Segment
  217.   add=m101.Add
  218.  END IF
  219.  modus=num
  220. END SUB
  221.  
  222. SUB LadePalette SHARED
  223.  d=ReadAmiga(bildFH,4)
  224.  DEF SEG = jseg
  225.  farben=PEEK(janus+3)
  226.  IF CHR$(PEEK(janus+0))="P" THEN
  227.   d=ReadAmiga(bildFH,3*255)
  228.   IF d>0 THEN
  229.    anzcols=d/3
  230.    REG %AX,(&H10*256)+&H12
  231.    REG %BX,0
  232.    REG %CX,INT(d/3)
  233.    REG %ES,jseg
  234.    REG %DX,janus
  235.    CALL INTERRUPT &H10
  236.   END IF
  237.  ELSE
  238.   p=janus
  239.   IF farben<253 THEN farben=farben+3
  240.   s=INT(farben/3)
  241.   s2=s+s
  242.   FOR i=1 TO s
  243.    s3=15+(i*(240/s))
  244.    POKE p+0,i
  245.    POKE p+1,i
  246.    POKE p+2,s3
  247.    POKE p+s,s3
  248.    POKE p+s+1,s3
  249.    POKE p+s+2,i
  250.    POKE p+s2,s3
  251.    POKE p+s2+1,i
  252.    POKE p+s2+2,i
  253.    p=p+3
  254.   NEXT
  255.   REG %AX,(&H10*256)+&H12
  256.   REG %BX,0
  257.   REG %CX,255
  258.   REG %ES,jseg
  259.   REG %DX,janus
  260.   CALL INTERRUPT &H10
  261.  END IF
  262. END SUB
  263.  
  264. SUB LadeBild SHARED
  265.  bild=0
  266.  bildFH=OpenAmiga(bild$)
  267.  IF bildFH<>-1 THEN
  268.   d=ReadAmiga(bildFH,8)
  269.   IF d=8 THEN
  270.    DEF SEG = jseg
  271.    IF CHR$(PEEK(janus+0))="C" AND CHR$(PEEK(janus+1))="D" AND CHR$(PEEK(janus+2))="A" AND CHR$(PEEK(janus+3))="T" THEN
  272.     w=PEEK(janus+4)*256+PEEK(janus+5)
  273.     h=PEEK(janus+6)*256+PEEK(janus+7)
  274.     IF w=800 THEN
  275.      modus=&H103
  276.      IF m103.Okay<>100 THEN
  277.       modus=0
  278.      END IF
  279.     ELSE
  280.      modus=&H101
  281.     END IF
  282.     IF modus<>0 THEN
  283.      size&=w*h
  284.      CALL SelectMode(modus)
  285.      IF REG(%AX)=&H4F THEN
  286.       bild=1
  287.       CALL Lade(bildFH,w*h)
  288.      END IF
  289.     ELSE
  290.      SOUND 1500,5
  291.     END IF
  292.    ELSE
  293.     SOUND 1500,5
  294.    END IF
  295.   ELSE
  296.    SOUND 1500,5
  297.   END IF
  298.  ELSE
  299.   SOUND 1500,5
  300.  END IF
  301. END SUB
  302.  
  303. SUB Lade(fh,size&) SHARED
  304.  p&=0 : d&=0 : bytes=1 : s=0
  305.  WHILE d&<size&
  306.   IF d&+16384>size& THEN l=size&-d& ELSE l=16384
  307.   bytes=ReadAmiga(fh,l)
  308.   CALL CopyToPC(segment,p&,bytes)
  309.   p&=p&+bytes
  310.   d&=d&+bytes
  311.   IF p&>65535 THEN
  312.    s=s+1
  313.    p&=0
  314.    CALL SelectRAM(s)
  315.   END IF
  316.  WEND
  317. END SUB
  318.  
  319. SUB SetPal(farbe,r,g,b) STATIC
  320.  REG %AX,(&H10*256)+&H10
  321.  REG %BX,farbe
  322.  REG %CX,(g*256)+b
  323.  REG %DX,(r*256)
  324.  CALL INTERRUPT &H10
  325. END SUB
  326.  
  327. SUB DrawX(x,y,sw,w,farbe) STATIC
  328.  xs=(y*sw)+x
  329.  FOR i=xs TO xs+w
  330.   POKE i,farbe
  331.  NEXT
  332. END SUB
  333.  
  334. SUB DrawY(x,y,sw,h,farbe) STATIC
  335.  FOR i=y TO y+h
  336.   POKE (i*sw)+x,farbe
  337.  NEXT
  338. END SUB
  339.  
  340. SUB DrawBox(x,y,w,h,farbe) SHARED
  341.  DEF SEG = segment
  342.  IF modus=&H103 THEN sw=800 ELSE sw=640
  343.  CALL DrawX(x,y,sw,w,farbe)
  344.  CALL DrawX(x,y+h,sw,w,farbe)
  345.  CALL DrawY(x,y,sw,h,farbe)
  346.  CALL DrawY(x+w,y,sw,h,farbe)
  347. END SUB
  348.  
  349. SUB Draw3dBox(x,y,w,h,farbe1,farbe2) SHARED
  350.  DEF SEG = segment
  351.  IF modus=&H103 THEN sw=800 ELSE sw=640
  352.  CALL DrawX(x,y,sw,w,farbe1)
  353.  CALL DrawX(x,y+h,sw,w,farbe2)
  354.  CALL DrawY(x,y,sw,h,farbe1)
  355.  CALL DrawY(x+w,y,sw,h,farbe2)
  356. END SUB
  357.  
  358. FUNCTION Button STATIC
  359.  REG %AX,3
  360.  CALL INTERRUPT &H33
  361.  Button=REG(%BX)
  362. END FUNCTION
  363.  
  364. FUNCTION Schalter SHARED
  365.  DIM cx(4),dx(4)
  366.  IF bildFH=-1 THEN
  367.   CALL SelectMode(&H101)
  368.  END IF
  369.  CALL SelectRAM(0)
  370.  j=0
  371.  FOR i=12 TO 15
  372.   REG %AX,(&H10*256)+&H15
  373.   REG %BX,i
  374.   CALL INTERRUPT &H10
  375.   cx(j)=REG(%CX)
  376.   dx(j)=REG(%DX)
  377.   j=j+1
  378.  NEXT
  379.  CALL SetPal(12,255,255,80)
  380.  CALL SetPal(13,160,160,180)
  381.  CALL SetPal(14,0,0,0)
  382.  CALL SetPal(15,255,255,255)
  383.  IF modus=&H103 THEN
  384.   CALL SeekAmiga(m103.File,8)
  385.   CALL Lade(m103.File,48800)
  386.  ELSE
  387.   CALL SeekAmiga(m101.File,8)
  388.   CALL Lade(m101.File,39040)
  389.  END IF
  390.  REG %AX,&H0B
  391.  CALL INTERRUPT &H33
  392.  ende1=1
  393.  IF wiederholung=1 THEN
  394.   CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  395.  END IF
  396.  gad=0 : ogad=0 : old=0 : down=0 : wahl=-1
  397.  CALL DrawBox(4,9,77,27,12)
  398.  i$=""
  399.  WHILE ende1=1
  400.   REG %AX,&H0B
  401.   CALL INTERRUPT &H33
  402.   i$=INKEY$
  403.   last=(REG(%CX)/4)+old
  404.   IF last<-6 OR i$="4" THEN
  405.    IF gad>0 THEN gad=gad-1
  406.    old=0
  407.   ELSEIF last>6 OR i$="6" THEN
  408.    IF gad<7 THEN gad=gad+1
  409.    old=0
  410.   ELSE
  411.    old=last
  412.   END IF
  413.   IF gad<>ogad THEN
  414.     IF down=1 THEN
  415.      CALL Draw3dBox(5+(ogad*78),10,75,25,15,14)
  416.      down=0
  417.     END IF
  418.     CALL DrawBox(4+(ogad*78),9,77,27,13)
  419.     CALL DrawBox(4+(gad*78),9,77,27,12)
  420.    ogad=gad
  421.   END IF
  422.   o=Button
  423.   IF o>1 OR i$=CHR$(27) THEN
  424.    ende1=0
  425.   ELSE
  426.    IF o=1 OR i$=CHR$(13) THEN
  427.     IF gad=6 THEN
  428.      IF wiederholung=0 THEN
  429.       CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  430.       wiederholung=1
  431.      ELSE
  432.       CALL Draw3dBox(5+(6*78),10,75,25,15,14)
  433.       wiederholung=0
  434.      END IF
  435.      WHILE Button<>0 : WEND
  436.     ELSE
  437.      CALL Draw3dBox(5+(gad*78),10,75,25,14,15)
  438.      down=1
  439.     END IF
  440.    ELSE
  441.     IF down=1 THEN
  442.      CALL Draw3dBox(5+(gad*78),10,75,25,15,14)
  443.      wahl=gad
  444.      down=0
  445.      ende1=0
  446.     END IF
  447.    END IF
  448.   END IF
  449.  WEND
  450.  IF bild=1 THEN
  451.   IF modus=&H103 THEN
  452.    CALL SeekAmiga(bildFH,8)
  453.    CALL Lade(bildFH,48800)
  454.   ELSE
  455.    CALL SeekAmiga(bildFH,8)
  456.    CALL Lade(bildFH,39040)
  457.   END IF
  458.  END IF
  459.  j=0
  460.  FOR i=12 TO 15
  461.   REG %AX,(&H10*256)+&H10
  462.   REG %BX,i
  463.   REG %CX,cx(j)
  464.   REG %DX,dx(j)
  465.   CALL INTERRUPT &H10
  466.   j=j+1
  467.  NEXT
  468.  Schalter=wahl
  469. END FUNCTION
  470.